package com.budwk.app.sqfwV2.service.weiqingmen;

import com.alibaba.fastjson.JSONObject;
import com.budwk.app.sqfw.vo.GenerateWordAndPdfUrlVO;
import com.budwk.app.sqfwDoc.bo.ExcelCreateConfig;
import com.budwk.app.sqfwDoc.codeGenerator.pdfGenerate.AbstractCustomerPdfCreateField;
import com.budwk.app.sqfwDoc.codeGeneratorV2.fileParam.CompleteFlowPdfParamForController;
import com.budwk.app.sqfwDoc.codeGeneratorV2.fileParam.PdfGenerateParam;
import com.budwk.app.sqfwDoc.codeGeneratorV2.generate.BasePdfGenerator;
import com.budwk.app.sqfwV2.dto.weiqingmen.SafetyCheckDTO;
import com.budwk.app.sqfwV2.enums.weiqingmen.SafetyCheckEnum;
import com.budwk.app.sqfwV2.generator.weiqingmen.*;
import com.budwk.app.util.poiUtils.CommonFormOfficeUtils;
import com.budwk.app.util.poiUtils.nutzBeanUtils.NutzIocUtils;
import com.deepoove.poi.xwpf.NiceXWPFDocument;
import com.google.common.collect.Lists;
import org.nutz.ioc.loader.annotation.IocBean;

import java.util.ArrayList;
import java.util.List;

/**
 * 应急巡查台账pdf
 * @BelongsProject: dfxy-shequ
 * @Author: yangweimin
 * @CreateTime: 2024-04-02  11:24
 * @Description: TODO
 */
@IocBean
public class EmergencyInspectionPdfService extends BasePdfService {

    /**
     * 创建pdf
     * @param paramForController
     */
    public void createPdf(CompleteFlowPdfParamForController paramForController) {
        super.createPdf(SafetyCheckEnum.EMERGENCY_INSPECTION, paramForController);
    }

    @Override
    protected AbstractCustomerPdfCreateField getCustomerPdfField(String jasonStr) {
        return JSONObject.parseObject(jasonStr, SafetyCheckDTO.class);
    }

    @Override
    protected void customerPopularPdfGenerateParam(PdfGenerateParam pdfGenerateParam) {

    }

    @Override
    protected List<BasePdfGenerator> getPdfGenerator(PdfGenerateParam pdfGenerateParam) {
        SafetyCheckDTO fieldDTO = (SafetyCheckDTO) pdfGenerateParam.getAbstractCustomerPdfCreateField();
        List<BasePdfGenerator> generatorList = Lists.newArrayList();

        // 威清门街道办事处应急巡查台账（餐饮店面）
        generatorList.add(new CateringStorePdfGenerator());
        if (fieldDTO.getAttributesOfInspectionUnits().equals(CateringStorePdfGenerator.NAME)) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        // 威清门街道办事处应急巡查台账（店面）
        generatorList.add(new StorefrontPdfGenerator());
        if (fieldDTO.getAttributesOfInspectionUnits().equals(StorefrontPdfGenerator.NAME)) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        // 威清门街道办事处应急巡查台账（临摊夜市摊）
        generatorList.add(new NightMarketStallPdfGenerator());
        if (fieldDTO.getAttributesOfInspectionUnits().equals(NightMarketStallPdfGenerator.NAME)) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        // 威清门街道办事处应急巡查台账（工地装修）
        generatorList.add(new SiteDecorationPdfGenerator());
        if (fieldDTO.getAttributesOfInspectionUnits().equals(SiteDecorationPdfGenerator.NAME)) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        // 威清门街道办事处应急巡查台账（危房）
        generatorList.add(new DangerousBuildingPdfGenerator());

        // 威清门街道办事处应急巡查台账（单位物管）
        generatorList.add(new UnitPropertyManagementPdfGenerator());
        if (fieldDTO.getAttributesOfInspectionUnits().equals(UnitPropertyManagementPdfGenerator.NAME)) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        // 威清门街道办事处应急巡查台账（重点场所）
        generatorList.add(new KeyPlacePdfGenerator());
        if (KeyPlacePdfGenerator.NAMES.contains(fieldDTO.getAttributesOfInspectionUnits())) {
            generatorList.add(new RectifyImgPdfGenerator());
        }

        return generatorList;
    }

    /**
     * 下载word模板
     * @param config
     * @return
     */
    public String downWordTemplate(ExcelCreateConfig config) {
        String fileName = SafetyCheckEnum.getTemplateName(config.getFileIdentity());

        List<NiceXWPFDocument> xwpfDocumentList = new ArrayList<>();

        SafetyCheckPdfService safetyCheckPdfService = NutzIocUtils.getBean(SafetyCheckPdfService.class);

        // 威清门街道办事处应急巡查台账（餐饮店面）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new CateringStorePdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（店面）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new StorefrontPdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（临摊夜市摊）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new NightMarketStallPdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（工地装修）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new SiteDecorationPdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（危房）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new DangerousBuildingPdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（单位物管）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new UnitPropertyManagementPdfGenerator().getTemplatePath(null)));
        // 威清门街道办事处应急巡查台账（重点场所）
        xwpfDocumentList.add(safetyCheckPdfService.getNiceXWPFDocument(new KeyPlacePdfGenerator().getTemplatePath(null)));

        GenerateWordAndPdfUrlVO vo = CommonFormOfficeUtils.wordTemplateUpload(xwpfDocumentList, fileName);

        return vo.getWordUrl();
    }

    @Override
    protected String getDownloadFileName(PdfGenerateParam pdfGenerateParam) {
        return SafetyCheckEnum.EMERGENCY_INSPECTION.getCompilationName();
    }

    @Override
    protected String getSummaryType() {
        return null;
    }
}
